import java.util.ArrayList;
import java.util.Calendar;
import java.util.Scanner;

public class CalendarTest {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        printCalendar(in);
    }

    static void printCalendar(Scanner in){
        System.out.println("请输入年份：");
        int year = in.nextInt();
        System.out.println("请输入月份：");
        int month = in.nextInt() - 1 ;
        if(month < 0 || month > 11){
            System.out.println("输入的月份有误");
            return;
        }

        ArrayList<ArrayList<Integer>> weekDay = new ArrayList<>();  //每个元素是日历的一列
        for(int i = 1 ; i <= 7 ; i++ ){
            weekDay.add(new ArrayList<>());
            for(int j = 0; j < 6 ; j++){ //日历至多6行，也就是每一列内部至多6个元素
                weekDay.get(i-1).add(-1);//提前将所有元素初始化为-1，方便后面打印空格
            }
        }

        Calendar calendar = Calendar.getInstance();

        calendar.set(year,month,1);
        int maxDaysOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

        //先把该月日历每一格的内容存储进嵌套的ArrayList中。
        int count = 0 ;
        for(int i = 1 ; i <= maxDaysOfMonth ; i++ ){
            calendar.set(year,month,i);
            int whichDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//Calendar中代表星期的数字是1~7
            weekDay.get(whichDayOfWeek-1).set(   count  , i );//但本地代表星期的数组下标仍然是从0开始的······
            if(whichDayOfWeek == 7){           //行数     内容
                count++;
            }
        }

        //打印日历
        System.out.println("   日   一  二  三  四   五  六");
        for(int j = 0 ; j < 6 ; j++){//日历行数
            for(int i = 1 ; i <= 7 ; i++ ){//日历列数
                int a = weekDay.get(i-1).get(j);  //weekDay.列数.行数
                if(a==-1){
                    System.out.print("    ");
                }else{
                    System.out.print("  ");
                    System.out.printf("%2d",a);
                }
            }
            System.out.print(System.lineSeparator());
        }

    }
}
/*
2025
6


 */